1 import random, pygame, sys, time
2 from
pygame.locals import *
3
4 FPS =
30
5 WINDOWWIDTH =
600
6 WINDOWHEIGHT =
600
7 BIRDSIZE = (
50, 40)
8
9 BLACK = (
0, 0, 0)
10 WHITE = (
255, 255, 255)
11
12 KICHTHUOCCOT =
70
13 KICHTHUOCTRONG =
200
14 KHOANGCACHCOT =
225
15 TOCDOCOT =
5
16
17 def main():
18     
global FPSCLOCK, DISPLAYSURF
19     pygame.init()
20     #pygame.display.set_caption(
'FLAPPY BIRD')
21     FPSCLOCK = pygame.time.Clock()
22     DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
23     a =
1.25
24     t =
0
25     bg = pygame.image.load(
'bg.bmp').convert()
26     
while True:
27         viTriChim = [WINDOWWIDTH/
2 - BIRDSIZE[0]/2, WINDOWHEIGHT/2 - BIRDSIZE[1]/2]
28         v =
0
29         tt =
0
30         vChu =
0
31         viTriChu = -
100
32         
while True:
33             #DISPLAYSURF.fill(WHITE)
34             DISPLAYSURF.blit(bg, (
0, 0))
35             mouseClick = False
36             
for event in pygame.event.get():
37                 
if event.type == QUIT or (event.type == KEYUP and event.key == K_ESCAPE):
38                     pygame.quit()
39                     sys.exit()
40                 
if event.type == MOUSEBUTTONUP:
41                     mouseClick = True
42             
if mouseClick == True:
43                 
break
44             viTriChim[
1] = viTriChim[1] + v + a/2
45             v = v + a
46             
if viTriChim[1] > WINDOWHEIGHT/2:
47                 v = -
10
48             veChim(viTriChim, t)
49             veChu(
'FLAPPY BIRD', viTriChu, 90, BLACK)
50             viTriChu += vChu +
1.25/2
51             vChu +=
1.25
52             
if viTriChu >= WINDOWHEIGHT/2 - 90:
53                 viTriChu = WINDOWHEIGHT/
2 - 90
54                 vChu =
0
55             
if tt <= 8:
56                 veChu(
'Click to start', WINDOWHEIGHT*0.6, 40, BLACK)
57             
else:
58                 veChu(
'Click to start', WINDOWHEIGHT*0.6, 40, (200, 200, 200))
59             
if tt >= 18:
60                 tt =
0
61             
else:
62                 tt +=
1
63             
if t >= 9:
64                 t =
0
65             
else:
66                 t = t +
1
67             pygame.display.update()
68             FPSCLOCK.tick(FPS)
69         v = -
15
70         cot = [[
0,0],[0,0],[0,0],[0,0],[0,0]]
71         cot[
0][0] = WINDOWWIDTH
72         cot[
0][1] = 100
73         diem =
0
74         ktDiem = True
75         
for i in range(1, 5):
76             cot[i][
0] = cot[i-1][0] + KHOANGCACHCOT
77             cot[i][
1] = random.randrange(80, WINDOWHEIGHT - KICHTHUOCTRONG - 100, 5)
78
79         
while True:
80             #DISPLAYSURF.fill(WHITE)
81             DISPLAYSURF.blit(bg, (
0, 0))
82             
if vaCham(viTriChim, cot):
83                 
break
84             mouseClick = False
85             
for event in pygame.event.get():
86                 
if event.type == QUIT or (event.type == KEYUP and event.key == K_ESCAPE):
87                     pygame.quit()
88                     sys.exit()
89                 
if event.type == MOUSEBUTTONUP:
90                     mouseClick = True
91             thayDoiViTriCot(cot)
92             v = thayDoiViTriChim(viTriChim, a, v, mouseClick)
93             ve5Cot(cot)
94             veChim(viTriChim, t)
95             
if tangDiem(cot, ktDiem):
96                 diem +=
1
97                 ktDiem = False
98             
else:
99                 ktDiem = True
100             veDiem(diem)
101             
102             
if t >= 9:
103                 t =
0
104             
else:
105                 t = t +
1
106
107             pygame.display.update()
108             FPSCLOCK.tick(FPS)
109         v =
0
110         viTriChu = -
100
111         vChu =
0
112         
while True:
113             #DISPLAYSURF.fill(WHITE)
114             DISPLAYSURF.blit(bg, (
0, 0))
115             ktThoatChim = False
116             ktThoatChu = False
117             
for event in pygame.event.get():
118                 
if event.type == QUIT or (event.type == KEYUP and event.key == K_ESCAPE):
119                     pygame.quit()
120                     sys.exit()
121             ve5Cot(cot)
122             veChim(viTriChim, t)
123             veChu(
'GAME OVER', viTriChu, 90, BLACK)
124             viTriChu += vChu +
1.25/2
125             vChu +=
1.25
126             v = thayDoiViTriChim(viTriChim, a, v, False)
127             
if viTriChim[1] >= WINDOWHEIGHT - BIRDSIZE[1]:
128                 viTriChim[
1] = WINDOWWIDTH - BIRDSIZE[1]
129                 v =
0
130                 ktThoatChim = True
131             
if viTriChu >= WINDOWHEIGHT/2 - 90:
132                 viTriChu = WINDOWHEIGHT/
2 - 90
133                 vChu =
0
134                 ktThoatChu = True
135             
if ktThoatChim == True and ktThoatChu == True:
136                 
break
137             pygame.display.update()
138             FPSCLOCK.tick(FPS)
139         tt =
0
140         
while True:
141             #DISPLAYSURF.fill(WHITE)
142             chuDiem =
'Score: ' + str(diem)
143             DISPLAYSURF.blit(bg, (
0, 0))
144             ve5Cot(cot)
145             veChim(viTriChim, t)
146             veChu(
'GAME OVER', WINDOWHEIGHT/2 - 90, 90, BLACK)
147             veChu(chuDiem, WINDOWHEIGHT/
2, 50, BLACK)
148             
if tt <= 8:
149                 veChu(
'Click to replay', WINDOWHEIGHT*0.6, 40, BLACK)
150             
else:
151                 veChu(
'Click to replay', WINDOWHEIGHT*0.6, 40, (200, 200, 200))
152             
if tt >= 18:
153                 tt =
0
154             
else:
155                 tt +=
1
156             mouseClick = False
157             
for event in pygame.event.get():
158                 
if event.type == QUIT or (event.type == KEYUP and event.key == K_ESCAPE):
159                     pygame.quit()
160                     sys.exit()
161                 
if event.type == MOUSEBUTTONUP:
162                     mouseClick = True
163             
if mouseClick == True:
164                 
break
165             pygame.display.update()
166             FPSCLOCK.tick(FPS)
167
168 def thayDoiViTriChim(viTri, a, v, mouseClick):
169     
if mouseClick == True:
170         v = -
15
171     viTri[
1] = viTri[1] + v + a/2
172     v = v + a
173     
return v
174
175 def veChim(viTri, t):
176     chim1 = pygame.image.load(
'chim1.png')
177     chim2 = pygame.image.load(
'chim2.png')
178     
if t <= 4:
179         DISPLAYSURF.blit(chim1, viTri)
180     
else:
181         DISPLAYSURF.blit(chim2, viTri)
182
183 def veCot(vitri, viTriTrong, kichThuoc, kichThuocTrong):
184     pygame.draw.rect(DISPLAYSURF, (
0, 200, 0), (vitri, 0, kichThuoc, viTriTrong))
185     pygame.draw.rect(DISPLAYSURF, (
0, 200, 0), (vitri, viTriTrong+kichThuocTrong, kichThuoc, WINDOWHEIGHT - kichThuocTrong - viTriTrong))
186     pygame.draw.rect(DISPLAYSURF, (
0, 255, 0), (vitri + kichThuoc/4, 0, kichThuoc/4, viTriTrong))
187     pygame.draw.rect(DISPLAYSURF, (
0, 255, 0), (vitri + kichThuoc/4, viTriTrong+kichThuocTrong, kichThuoc/4, WINDOWHEIGHT - kichThuocTrong - viTriTrong))
188     pygame.draw.rect(DISPLAYSURF, BLACK, (vitri, -
4, kichThuoc, viTriTrong + 4), 2)
189     pygame.draw.rect(DISPLAYSURF, BLACK, (vitri, viTriTrong+kichThuocTrong, kichThuoc, WINDOWHEIGHT - kichThuocTrong - viTriTrong +
4), 2)
190     pygame.draw.rect(DISPLAYSURF, (
0, 150, 0), (vitri - 2, viTriTrong - 30, kichThuoc + 4, 30))
191     pygame.draw.rect(DISPLAYSURF, (
0, 150, 0), (vitri - 2, viTriTrong + kichThuocTrong, kichThuoc + 4, 30))
192     pygame.draw.rect(DISPLAYSURF, BLACK, (vitri -
2, viTriTrong - 30, kichThuoc + 4, 30), 2)
193     pygame.draw.rect(DISPLAYSURF, BLACK, (vitri -
2, viTriTrong + kichThuocTrong, kichThuoc + 4, 30), 2)
194
195 def ve5Cot(cot):
196     
for i in range(5):
197         veCot(cot[i][
0], cot[i][1], KICHTHUOCCOT, KICHTHUOCTRONG)
198
199 def thayDoiViTriCot(cot):
200     
201     
if cot[0][0] < -KICHTHUOCCOT:
202         
for i in range(4):
203             cot[i][
0] = cot[i+1][0]
204             cot[i][
1] = cot[i+1][1]
205         
206         cot[
4][0] = cot[3][0] + KHOANGCACHCOT
207         cot[
4][1] = random.randrange(80, WINDOWHEIGHT - KICHTHUOCTRONG - 100, 5)
208     
for i in range(5):
209         cot[i][
0] -= TOCDOCOT
210
211 def Cham1Cot(viTriChim, cot):
212     GhChimTren = viTriChim[
1]
213     GhChimDuoi = viTriChim[
1] + BIRDSIZE[1]
214     GhChimTrai = viTriChim[
0]
215     GhChimPhai = viTriChim[
0] + BIRDSIZE[0]
216
217     GhCotTrai = cot[
0]
218     GhCotPhai = cot[
0] + KICHTHUOCCOT
219     GhCotTren = cot[
1]
220     GhCotDuoi = cot[
1] + KICHTHUOCTRONG
221
222     
if GhChimTrai > GhCotPhai - KICHTHUOCCOT/4:
223         
return False
224     
if (GhChimPhai - GhCotTrai) > 0 and (GhCotTren - GhChimTren) > 0:
225         
return True
226     
if (GhChimDuoi - GhCotDuoi) > 0 and (GhChimPhai - GhCotTrai) > 0:
227         
return True
228     
if GhChimDuoi >= WINDOWHEIGHT or GhChimTren < -100:
229         
return True
230     
return False
231 def vaCham(viTriChim, cot):
232     
for i in range(4):
233         
if Cham1Cot(viTriChim, cot[i]):
234             
return True
235     
return False
236 def tangDiem(cot, ktDiem):
237     
for i in range(4):
238         giuaCot = cot[i][
0] + KICHTHUOCCOT/2
239         giuaManHinh = WINDOWWIDTH/
2
240         
if abs(giuaCot - giuaManHinh) <= TOCDOCOT/2 and ktDiem == True:
241             
return True
242     
return False
243 def veDiem(diem):
244     d = str(diem)
245     fontObj = pygame.font.SysFont(
'Comic Sans MS', 50)
246     textSurfaceObj = fontObj.render(d, False, BLACK)
247     textRectObj = textSurfaceObj.get_rect()
248     textRectObj.center = (WINDOWWIDTH/
2, WINDOWHEIGHT/6)
249     DISPLAYSURF.blit(textSurfaceObj, textRectObj)
250
251 def veChu(text, vitri, size, color):
252     l = len(text)
253     fontObj = pygame.font.SysFont(
'Comic Sans MS', size)
254     textSurfaceObj = fontObj.render(text, False, color)
255     textRectObj = textSurfaceObj.get_rect()
256     textRectObj.center = (WINDOWWIDTH/
2 - l/2, vitri)
257     DISPLAYSURF.blit(textSurfaceObj, textRectObj)

258
259 if
__name__ == '__main__':
260     main()


Gõ tìm kiếm nhanh...